

def func1():
    num = 10  # 这是此函数中的局部变量，只能在此函数内部生效，此函数执行完毕后删除引用
# 当有外部使用的需求时，可用 return 将之返回并保存
    print(num)


func1()


def func2():
    num = 20  # 不同函数内部可以存在取名相同的局部变量，互不影响
    print(num)


func2()
func1()
func2()
print('=' * 40)
g_num = 10  # 在函数外部定义的变量，它是个全局变量


def func3():
    print(g_num)


def func4():
    g_num = 20
    print(g_num)


def func5():
    global g_num  # 这是强制引用全局变量的声明
    g_num = 30  # 全局变量的引用被修改
    print(g_num)


func3()  # 全局变量可以在函数中被引用
func4()  # 当函数体中已有局部变量，就近选择局部变量的引用而非全局变量
func3()  # 只要没有在函数体中使用 global 对全局变量修改引用，那么全局变量不会被任何局部变量影响
func5()  # 注意：尽管此处修改了全局变量的引用，但是输出时仍然使用的是局部变量
func3()  # 因为代码顺序执行，此时全局变量已被修改
func4()  # 当函数体中已有局部变量，就近选择局部变量的引用而非全局变量
func5()  # 按局部变量输出
print(g_num)  # 因为代码顺序执行，此时全局变量已被修改，若注释上方的函数调用代码，此时输出原值
